# /usr/bin/python3
# 运行环境： ubuntu 16.04 LTS
# tensorflow 1.13.1
# opencv 3.4.1.15
# 数据集： COCO 2017
# 查看COCO数据集中的类的样本数, 以及是否做了标定框
import cv2
import matplotlib as mt
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import os
import time
import PIL
import skimage.io as io
import xml.etree.ElementTree as ET

from pycocotools.coco import COCO
# 这里顺序要放在最后, 不然这个界面显示的GUI不会生效
mt.use('TkAgg');


annfile = r'COCO/dataset_training/annotations_trainval2017/annotations/instances_train2017.json'
coco = COCO(annfile);
# car           的ID号是 3;    数量： 12251
# backpack      的ID号是 27;   数量： 5528
# tie           的ID号是 32;   数量： 3810
# handbag       的ID号是 31;   数量： 6841
# suitcase      的ID号是 33;   数量： 2402
# bottle        的ID号是 44;   数量： 8501
# wine glass    的ID号是 46;   数量： 2533
# cup           的ID号是 47;   数量： 9189
# knife         的ID号是 49;   数量： 4326
# spoon         的ID号是 50;   数量： 3529
# bowl          的ID号是 51;   数量： 7111
# chair         的ID号是 62;   数量： 12774
# couch         的ID号是 63;   数量： 4423
# potted plant  的ID号是 64;   数量： 4452
# bed           的ID号是 65;   数量： 3682
# dining table  的ID号是 67;   数量： 11837
# toilet        的ID号是 70;   数量： 3353
# banana        的ID号是 52;   数量： 2243
# apple         的ID号是 53;   数量： 1586
# sandwich      的ID号是 54;   数量： 2365
# orange        的ID号是 55;   数量： 1699
# hot dog       的ID号是 58;   数量： 1222
# pizza         的ID号是 59;   数量： 3166
# cake          的ID号是 61;   数量： 2925
# tv            的ID号是 72;   数量： 4561
# laptop        的ID号是 73;   数量： 3524
# mouse         的ID号是 74;   数量： 1876
# keyboard      的ID号是 76;   数量： 2115
# cell phone    的ID号是 77;   数量： 4803
# book          的ID号是 84;   数量： 5332
# clock         的ID号是 85;   数量： 4659
# vase          的ID号是 86;   数量： 3593
# scissors      的ID号是 87;   数量： 947
# microwave     的ID号是 78;   数量： 1547
# oven          的ID号是 79;   数量： 2877
# refrigerator  的ID号是 82;   数量： 2360
# bicycle       的ID号是 2;    数量： 3252
# motorcycle    的ID号是 4;    数量： 3502
# train         的ID号是 7;    数量： 3588
# truck         的ID号是 8;    数量： 6127
# boat          的ID号是 9:    数量： 3025
# cat           的ID号是 17;   数量： 4114
# dog           的ID号是 18;   数量： 4385
# bird          的ID号是 16;   数量： 3237
# traffic light 的ID号是 10;   数量： 4139
# bench         的ID号是 15;   数量： 5570
# umbrella      的ID号是 28;   数量： 3968
# person        的ID号是 1;    数量： 64115
# bus           的ID号是 6;    数量： 3952
catIds = coco.getCatIds(catNms=['cell phone']);
catIds_1 = coco.getCatIds(catNms=['bus']);
catIds_2 = coco.getCatIds(catNms=['person']);
# 类别的ID号
print(catIds);
print(catIds_1);
print(catIds_2);

imgIds = coco.getImgIds(catIds = catIds[0]);
imgIds_1 = coco.getImgIds(catIds = catIds_1[0]);
imgIds_2 = coco.getImgIds(catIds = catIds_2[0]);
# 所属类别的图片ID号
print(imgIds);
# 所属类别的图片的数量
print('imgIds的数量：', len(imgIds));
print('imgIds_1的数量：', len(imgIds_1));
print('imgIds_2的数量：', len(imgIds_2));
img = coco.loadImgs(imgIds[250]);
print(img);
print(type(img[0]));
print(img[0]['file_name']);
# 本执行文件与COCO目录是在同一目录下
path = 'COCO//dataset_training//train2017//train2017//';
path += str(img[0]['file_name']);
print(path);
I = io.imread(path);
print(type(I));
plt.figure(1);
plt.imshow(I);
plt.axis('off');
plt.show();
annIds = coco.getAnnIds(imgIds=img[0]['id'], catIds=catIds, iscrowd=None);
anns = coco.loadAnns(annIds);
print(anns[0]['bbox']);
